﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Text.RegularExpressions;

using RAE.GUI.Info;
using RAE.GUI.Configuracion;
using RAE.GUI.Torneos;
using RAE.Logica.Controladores;
using RAE.Logica.ExcelLogic;
using RAE.Logica.Info;
using System.Windows.Forms;

namespace RAE.GUI.Inicio
{
    /// <summary>
    /// Interaction logic for Registro_de_Ajedrecistas_y_estrategia.xaml
    /// </summary>
    public partial class VentanaPrincipal : Window 
    {
        
        public VentanaPrincipal()
        {
            InitializeComponent();
            Init();
        }
        private void Init()
        {
            setCategorias();
            setTitulos();
            setGrid();

            if (Aplicacion.usuario_actual == Usuario.ADMINISTRADOR)
            {
                menu_configuracion.IsEnabled = true;
                menu_ajedrecista.IsEnabled = true;
                menu_torneo.IsEnabled = true;
                menu_historial.IsEnabled = true;
                menu_exportar.IsEnabled = true;
                menu_importar.IsEnabled = true;
                menu_estadisticas.IsEnabled = true;
            }
            else if (Aplicacion.usuario_actual == Usuario.ENCARGADO_ELO)
            {
                menu_configuracion.IsEnabled = false;
                menu_ajedrecista.IsEnabled = true;
                menu_torneo.IsEnabled = true;
                menu_historial.IsEnabled = true;
                menu_exportar.IsEnabled = true;
                menu_importar.IsEnabled = true;
                menu_estadisticas.IsEnabled = false;
            }
            else
            {
                menu_configuracion.IsEnabled = false;
                menu_ajedrecista.IsEnabled = false;
                menu_torneo.IsEnabled = false;
                menu_historial.IsEnabled = false;
                menu_exportar.IsEnabled = false;
                menu_importar.IsEnabled = false;
                menu_estadisticas.IsEnabled = false;
            }
        }
        #region Cargadores Interfaz
        public void setGrid()
        {
            Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas;
            Ajedrecistas.Items.Refresh();
        }
        private void setCategorias() 
        {
            comboCategorias.ItemsSource = Aplicacion.categorias;
            comboCategorias.SelectedIndex = 0;
        }
        private void setTitulos()
        {
            comboTitulos.ItemsSource = Aplicacion.titulos.Values;
            comboTitulos.SelectedIndex = 0;
        }
        #endregion

        #region Filtros
        //Checkbox Accions
        private void tipoFiltrado()
        {
            try
            {
                if ((bool)radioListacompleta.IsChecked)  setGrid(); 

                comboCategorias.IsEnabled = (bool)radioCategoria.IsChecked;
                if ((bool)radioCategoria.IsChecked) filtroCategoria(); 

                comboTitulos.IsEnabled = (bool)radioTitulo.IsChecked;
                if ((bool)radioTitulo.IsChecked) filtroTitulos();

                textNombre.IsEnabled = (bool)radioNombre.IsChecked;
                if ((bool)radioNombre.IsChecked)  filtroNombre(); 
            }
            catch (Exception e)
            {
            }
        }

        private void filtroCategoria()
        {
            if (Aplicacion.categorias.Count == 0)
                Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas.Select(a => a);
            else
            {
                var combo = (Categoria)comboCategorias.SelectedItem;
                if (combo == null)
                {
                    comboCategorias.SelectedIndex = 0;
                    combo = (Categoria)comboCategorias.SelectedItem;
                }
                Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas.Select(a => a).Where(a => a.categoria.id == combo.id);
            }
            Ajedrecistas.Items.Refresh();
        }
        private void filtroTitulos()
        {
            var combo = (Titulo)comboTitulos.SelectedItem;
            Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas.Select(a => a).Where(a => Regex.IsMatch(a.stringTitulos,combo.codigo.Trim(),RegexOptions.IgnoreCase));
            Ajedrecistas.Items.Refresh();
        }
        private void filtroNombre()
        {
            Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas.Select(a => a).Where(a => Regex.IsMatch(a.nombre.Trim() + " " + a.apellidos.Trim(), textNombre.Text, RegexOptions.IgnoreCase));
            Ajedrecistas.Items.Refresh();
        }
        #endregion

        #region Eventos
        private void comboCategorias_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            filtroCategoria();
        }
        private void comboTitulos_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            filtroTitulos();
        }

        private void MenuNuevoAjedrecista_Click(object sender, RoutedEventArgs e)
        {
            new DialogoRegistro(this).Show();
        }
        private void radioChecked(object sender, RoutedEventArgs e)
        {
            tipoFiltrado();
        }

        #endregion

        private void FichaClick(object sender, RoutedEventArgs e)
        {
            if (Ajedrecistas.SelectedItem != null)
                new DialogoConsulta(this, (Ajedrecista) Ajedrecistas.SelectedItem).Show();
        }

        private void FiltrarPorNombre(object sender, TextChangedEventArgs e)
        {
            filtroNombre();
        }

        private void MostrarConfiguracion(object sender, RoutedEventArgs e)
        {
            new DialogoConfiguracion().Show();
        }

        private void textNombre_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            try
            {
                Regex regex = new Regex("[a-zA-Z]+$");
                e.Handled = !(regex.IsMatch(e.Text));
            }
            catch (Exception f)
            { }
        }

        private void HistorialElo_Click(object sender, RoutedEventArgs e)
        {
            HistorialElo historial = new HistorialElo();
            historial.Show();
        }

        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            new VentanaRegistroTorneos().Show();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            Aplicacion.initAjedrecistas();
            Ajedrecistas.ItemsSource = Aplicacion.ajedrecistas;
            Ajedrecistas.Items.Refresh();
        }

        private void ExportarLista(object sender, RoutedEventArgs e)
        {
            string filename = "Ranking-" + DateTime.Today.Year + DateTime.Today.Month + DateTime.Today.Day;
                ExcelExport.exportList(Aplicacion.ajedrecistas, filename);
        }

        private void Estadisticas_Click(object sender, RoutedEventArgs e)
        {
            new EstadisticaAjedrecistas().Show();
        }

        private void ImportarLista(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.CheckFileExists = true;
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                ExcelImport.leerExcel(dialog.FileName);
        }
    }
}